//////////////////////////////////////////////////////////////////////
//
// NO_ArchiveTxt.h header for the $1 class.
//
//////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////
#ifndef NO_ArchiveTxt_H
#define NO_ArchiveTxt_H

//////////////////////////////////////////////////////////////////////////
#include "NO_Includes.h"
#include "NO_IOArchive.h"

//////////////////////////////////////////////////////////////////////////
// class NO_ArchiveTxt definition
//////////////////////////////////////////////////////////////////////////
class NO_DLL_TAL NO_ArchiveTxt : public NO_IOArchive
{
public:
	//////////////////////////////////////////////////////////////////////
	// con/destruction
	//////////////////////////////////////////////////////////////////////

	//////////////////////////////////////////////////////////////////////
	NO_ArchiveTxt(void);
	virtual~NO_ArchiveTxt();

	//////////////////////////////////////////////////////////////////////////
	// use
	//////////////////////////////////////////////////////////////////////////

	//////////////////////////////////////////////////////////////////////////
	virtual NO_OArchive& operator<<(NO_Object& object);
	virtual NO_IArchive& operator>>(NO_Object& object);

	/////////////////////////////////////////////////////////////////////////
	// write
	/////////////////////////////////////////////////////////////////////////

	/////////////////////////////////////////////////////////////////////////
	virtual NO_OArchive& write(NO_Boolean& object);
	virtual NO_OArchive& write(NO_Int& object);
	virtual NO_OArchive& write(NO_Int8& object);
	virtual NO_OArchive& write(NO_UInt& object);
	virtual NO_OArchive& write(NO_UInt8& object);
	virtual NO_OArchive& write(NO_SInt8& object);
	virtual NO_OArchive& write(NO_UInt16& object);
	virtual NO_OArchive& write(NO_SInt16& object);
	virtual NO_OArchive& write(NO_UInt32& object);
	virtual NO_OArchive& write(NO_SInt32& object);
	virtual NO_OArchive& write(NO_UInt64& object);
	virtual NO_OArchive& write(NO_SInt64& object);
	virtual NO_OArchive& write(NO_Float32& object);
	virtual NO_OArchive& write(NO_Float64& object);
	virtual NO_OArchive& write(std::string& object);
	virtual NO_OArchive& write(const NO_Int8* object);
	virtual NO_OArchive& write(NO_Int8* object);

	//////////////////////////////////////////////////////////////////////////
	virtual NO_OArchive& writeBegin	(NO_Object& object);
	virtual NO_OArchive& writeEnd	(NO_Object& object);
	
	/////////////////////////////////////////////////////////////////////////
	// read
	/////////////////////////////////////////////////////////////////////////

	//////////////////////////////////////////////////////////////////////
	virtual NO_IArchive& read(NO_Boolean& object);
	virtual NO_IArchive& read(NO_Int& object);
	virtual NO_IArchive& read(NO_Int8& object);
	virtual NO_IArchive& read(NO_UInt& object);
	virtual NO_IArchive& read(NO_UInt8& object);
	virtual NO_IArchive& read(NO_SInt8& object);
	virtual NO_IArchive& read(NO_UInt16& object);
	virtual NO_IArchive& read(NO_SInt16& object);
	virtual NO_IArchive& read(NO_UInt32& object);
	virtual NO_IArchive& read(NO_SInt32& object);
	virtual NO_IArchive& read(NO_UInt64& object);
	virtual NO_IArchive& read(NO_SInt64& object);
	virtual NO_IArchive& read(NO_Float32& object);
	virtual NO_IArchive& read(NO_Float64& object);
	virtual NO_IArchive& read(std::string& object);
	virtual NO_IArchive& read(const NO_Int8* object);
	virtual NO_IArchive& read(NO_Int8*& object);

	//////////////////////////////////////////////////////////////////////
	virtual NO_IArchive& readBegin(void);
	virtual NO_IArchive& readEnd	(void);

protected:
	//////////////////////////////////////////////////////////////////////
	NO_ArchiveTxt(const NO_ArchiveTxt& rhs);
	NO_ArchiveTxt& operator=(const NO_ArchiveTxt& rhs);
};

#endif 